#ifndef _SEARCHABLE_MAP_H_
#define _SEARCHABLE_MAP_H_

#include <vector>
using namespace std;

/*	Interface for a map that is searchable by a path finding algorithm. T is the type of nodes the map is
	composed of. The node must overload the == operator.
*/
template <typename T>
struct SearchableMap
{
	virtual ~SearchableMap()	{}
	// Returns a vector of pairs (an adjacent node and the distance to that adjacent node)
	virtual vector < pair<T, double> > get_adjacent_positions(T) const = 0;
	
	// The estimated distance to the goal (must be less than the actual distance for A* to return an optimal path)
	virtual double get_estimated_distance(T loc1, T loc2) const = 0;
};

#endif
